import request from "@/utils/request";

const API_PREFIX = "/sys/dict";

/**
 * 字典查询参数
 */
export interface DictQuery {
  /** 关键字(字典名称/编码) */
  keywords?: string;
  /** 字典ID */
  dictId?: string;
  /** 字典 */
  dict?: string;
  /** 状态(0-禁用 1-启用) */
  state?: string;
  /** 当前页码 */
  cur?: number;
  /** 每页数量 */
  limit?: number;
}

/**
 * 字典对象
 */
export interface Dict {
  /** 字典ID */
  id: string;
  /** 字典名称 */
  name: string;
  /** 字典编码 */
  code: string;
  /** 父级ID */
  parentId: string;
  /** 排序 */
  sort: number;
  /** 状态(0-禁用 1-启用) */
  status: string;
  /** 备注 */
  remark?: string;
  /** 创建用户ID */
  createUserId?: string;
  /** 更新用户ID */
  updateUserId?: string;
}

/**
 * 字典项对象
 */
export interface DictItem {
  /** 字典项ID */
  id: string;
  /** 字典ID */
  dictId: string;
  /** 字典项名称 */
  name: string;
  /** 字典项值 */
  value: string;
  /** 排序 */
  sort: number;
  /** 状态(0-禁用 1-启用) */
  status: string;
  /** 备注 */
  remark?: string;
  /** 创建用户ID */
  createUserId?: string;
  /** 更新用户ID */
  updateUserId?: string;
}

/**
 * 字典数据传输对象
 */
export interface DictDTO {
  /** 字典名称 */
  name: string;
  /** 字典编码 */
  code: string;
  /** 字典数据列表 */
  dictDataList: DictItemDTO[];
}

/**
 * 字典项数据传输对象
 */
export interface DictItemDTO {
  /** 标签 */
  label: string;
  /** 值 */
  value: string;
}

const DictAPI = {
  /**
   * 获取字典树
   * @param keywords 关键字
   */
  getTree(keywords?: string) {
    return request<Dict[]>({
      url: `${API_PREFIX}/tree`,
      method: 'get',
      params: { keywords }
    });
  },

  /**
   * 获取字典分页列表
   */
  getPage(params: DictQuery) {
    return request<PageResult<Dict[]>>({
      url: `${API_PREFIX}/pages`,
      method: 'get',
      params
    });
  },

  /**
   * 获取字典列表
   */
  getList(params: { keywords?: string; code?: string }) {
    return request<DictDTO[]>({
      url: `${API_PREFIX}/list`,
      method: 'get',
      params
    });
  },

  /**
   * 保存字典
   */
  save(data: Dict) {
    return request({
      url: `${API_PREFIX}/save`,
      method: 'post',
      data
    });
  },

  /**
   * 删除字典
   * @param ids 字典ID，多个以英文逗号(,)分隔
   */
  deleteByIds(ids: string) {
    return request({
      url: `${API_PREFIX}/${ids}`,
      method: 'delete'
    });
  },

  /**
   * 获取字典项分页列表
   */
  getItemPage(params: DictQuery) {
    return request<PageResult<DictItem[]>>({
      url: `${API_PREFIX}/item/pages`,
      method: 'get',
      params
    });
  },

  /**
   * 保存字典项
   */
  saveItem(data: DictItem) {
    return request({
      url: `${API_PREFIX}/item/save`,
      method: 'post',
      data
    });
  },

  /**
   * 删除字典项
   * @param ids 字典项ID，多个以英文逗号(,)分隔
   */
  deleteItem(ids: string) {
    return request({
      url: `${API_PREFIX}/item/${ids}`,
      method: 'delete'
    });
  },

  /**
   * 根据字典ID获取下拉选项
   */
  listOptions(params: { keywords?: string; id: string }) {
    return request<Dict[]>({
      url: `${API_PREFIX}/options`,
      method: 'get',
      params
    });
  },

  /**
   * 根据字典编码获取下拉选项
   * @param typeCode 字典编码
   */
  listItemOptions(typeCode: string) {
    return request<DictItem[]>({
      url: `${API_PREFIX}/${typeCode}/options`,
      method: 'get'
    });
  }
};

export default DictAPI;
